/*
 * Server.h
 *
 *  Created on: Oct 27, 2012
 *      Author: lucas
 */

#ifndef SERVER_H_
#define SERVER_H_
#include <string>
#include <vector>
#include <list>
#include "ListeningThread.h"
#include "EventHandlingThread.h"
#include "../common/BlockingQueue.h"
#include "Client.h"
class ClientThread;
class Event;
class Server {
private:
	ListeningThread listening_t;
	EventHandlingThread event_t;
	std::vector<Client*> clientes;
	BlockingQueue<Event*> eventQueue;
	std::list<GameThread*> games;


	Server(const Server& s);
	Server& operator=(const Server& s);
	//carga todos los mundos del archivo xml de mundos
	void loadWorldsXML();
	//guarda los nuevos niveles y mundos en el archivo de mundos
	void saveWorldsXML();

public:
	Server(unsigned int port);
	void agregarCliente(Client* ct);
	void addRequest(std::string request, Client& client);
	Event* receiveEvent();
	void run();
	void stop();
	void quitarClientesDesconectados();
	virtual ~Server();
	//agrega un nivel a un mundo
	void addLevel(std::string xmlLevelFilename);
	//agrega un mundo
	void addWorld(std::string xmlWorldFilename);


};

#endif /* SERVER_H_ */
